package com.example.demo.index.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSONObject;
import com.example.demo.entity.LoginEnity;
import com.example.demo.entity.MenuEntity;
import com.example.demo.entity.base.ResponseBean;
import com.example.demo.entity.base.ResponseEntity;
import com.example.demo.index.dao.HomepageDao;
import com.example.demo.util.EmptyUtil;
import com.example.demo.util.JWTUtil;
import com.example.demo.util.RedisUtil;
import com.example.demo.util.ResponseBeanUtil;
import com.example.demo.util.ResponseFactory;
import com.example.demo.util.TreeUtil;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
public class HomepageService {
	
	@Autowired
	private HomepageDao homepageDao;
	
	@Autowired
	private RedisUtil redisUtil;
	
	/**
	 * @return
	 * @创建时间: 2019年11月21日
	 * @创建人: 许子文
	 * @功能描述:　从缓存里获取登陆信息
	 */
	public ResponseEntity<LoginEnity> getLoginInfoFromCache(String token){
		
		if(EmptyUtil.isEmpty(token)) {
			return ResponseFactory.setFail("未获取token登陆令牌");
		}
		
		String loginInfoStr = null; 
		
		try {
			loginInfoStr = redisUtil.getValue(token);
		} catch (Exception e) {
			log.error("从缓存中获取登陆信息失败",e);
			return ResponseFactory.setFail("从缓存中获取登陆信息失败");
		}
		
		LoginEnity loginEntity = null;
		
		try {
			loginEntity = JSONObject.parseObject(loginInfoStr, LoginEnity.class);
		} catch (Exception e) {
			log.error("格式化登陆信息失败",e);
			return ResponseFactory.setFail("格式化登陆信息失败");
		}
		
		return ResponseFactory.setObject(loginEntity);
	}
	
	/**
	 * @return
	 * @创建时间: 2019年9月9日
	 * @创建人: 许子文
	 * @功能描述: 获取登陆人的菜单列表
	 */
	public ResponseBean getLoginMenus(String token) {
		if(EmptyUtil.isEmpty(token)) {
			return ResponseBeanUtil.error("未获取token");
		}
		
		String login_id = null;
		
		try {
			login_id = JWTUtil.getLoginId(token);
		} catch (Exception e) {
			log.error("传入的token不正确",e);
			return ResponseBeanUtil.error("传入的token不正确");
		}
		
		if(EmptyUtil.isEmpty(login_id)) {
			return ResponseBeanUtil.error("获取到的用户id为空");
		}
		
		List<MenuEntity> menus = null;
		
		try {
			menus = getMenuList(login_id,"0");
		} catch (Exception e) {
			log.error("获取菜单集合失败",e);
			return ResponseBeanUtil.error("获取菜单集合失败");
		}
		
		return ResponseBeanUtil.success(menus);
	}
	
	/**
	 * @return
	 * @创建时间: 2019年9月9日
	 * @创建人: 许子文
	 * @功能描述: 通过递归算法获取菜单集合
	 */
	public List<MenuEntity> getMenuList(String login_id,String root_id) throws Exception{
		List<MenuEntity> menus = null;
		
		MenuEntity params = new MenuEntity();
		params.setLogin_id(login_id);
		
		menus = homepageDao.getLoginMenus(params);
		
		menus = TreeUtil.installMenuTree(menus);
		
		return menus;
	}
}
